import {defineConfig, loadEnv} from 'vite'
import viteBaseConfig from "./vite.base.config";
import viteProdConfig from "./vite.prod.config";
import viteDevConfig from "./vite.dev.config";

//策略模式
const envResolver={
    'build':()=>{
        console.log('生产环境')
        return {...viteBaseConfig,...viteProdConfig}
    },
    'serve':()=>{
        console.log('测试环境')
        return {...viteBaseConfig,...viteDevConfig}
    }

}

export default defineConfig(({command,mode})=>{

    //这里的commands（启动的命令）是： build（yarn vite build打包）、serve（yarn vite dev）
    console.log('command --> ',command)

    //这里的mode是：production、development 、mode的参数
    //注意：
    //  mode 就是vite build --mode xxxx中的xxxx
    //  默认 yarn vite build 等价于 yarn vite build --mode=production
    //  默认 yarn vite dev 等价于 yarn vite dev --mode=development
    console.log('mode --> ',mode)

    //-------加载对应环境的环境变量----------
    // 内置函数loadEnv
    // 参数1：当前运行的模式。回去查找`.env.[参数1]`文件作为环境变量
    // 参数2：想要加载的.env文件所在的目录。因为我们的.env文件就在根目录，所以使用process.cwd()函数可以返回运行当前js文件时，所在的目录
    // 注意.env文件中的环境变量默认应该为VITE_xxxx格式，xxx将会被作为环境变量。
    // 在vite.base.config.js配置了envPrefix:'ENV_'，则环境变量必须是ENV_
    // 在项目中，环境变量被放置在import.meta.env中
    loadEnv(mode,process.cwd())


    //-------安装对应环境的返回对应环境的配置文件---------
    //这个函数返回的对象，才是最终的vite配置。我们可以将配置写到
    //vite.base.config.js（共同的配置） 、vite.dev.config.js（开发的配置） 、vite.base.prod.js（生产的配置）
    return envResolver[command]()
})
